nginx的接入日志,是一份巨大的宝库,通过监控,分析日志,可以掌握系统的运载情况,甚至可以分析用户行为。

想到日志的监控,分析,最容易想到tail,awk这样的命令,但实际操作中,刷刷流过的日志信息,似乎也不会让你有什么头绪。

ngxtop 简介

ngxtop 类似于linux的 top 命令,设计为在短时间内运行,作为服务器的故障排除和监控使用

ngxtop 使用python2编写和测试,但也可以支持python3,使用sqlite 数据库

ngxtop 安装

ngxtop使用python编写, 所以可以使用pip命令进行安装,确保机器上已经安装好了python环境和pip

    sudo pip install ngxtop
  • 注意:

安装成功,但执行ngxtop时,报这种错误:

ImportError: No module named _curses

是因为 ngxtop 可执行命令未安装到 /usr/bin/下,而是/usr/local/bin/,所以建议安装时,加上 sudo

ngxtop 命令简介

用法:
    ngxtop [options]
    ngxtop [options] (print|top|avg|sum) <var> ...
    ngxtop info
    ngxtop [options] query <query> ...

参数选项说明

  • -l 或–access-log 日志的路径
  • -f 或–log-format 设置日志格式,默认格式combined,另外一种较常用格式为common
  • –no-follow 处理历史的日志
  • -t 或 –interval 刷新频率,默认2秒
  • -g 或 –group-by 按变量分组,默认显示 request_path
  • -w 或 –having 筛选 [default: 1]
  • -o 或 –order-by 输出的排序方式,默认: 访问数
  • -n 或 –limit 显示top多条,默认前top 10条
  • -a …或 –a … 对输出字段做处理,可选 sum, avg, min, max
  • -v或 –verbose 详细输出
  • -d或 –debug debug模式,输出每行及记录
  • -h或 –help 显示帮助详细
  • –version 显示版本信息

高级选项

  • -c 或 –config 指定nginx配置文件,自动分析日志格式
  • -i 或 –filter 只处理符合规则的记录
  • -p 或 –pre-filter in-filter expression to check in pre-parsing phase.
    另外一些变量可以在分析时用到,名字含义同日志格式里的设置:remote_addr、remote_user、time_local、request、request_path、status、body_bytes_sent、http_referer、http_user_agent。

使用示例:

  • 列出10个nginx服务器,按请求数量排序

      ngxtop
    
  • 显示前20个最频繁的请求

      ngxtop -n 20 
    
  • 获取nginx基本信息

      ngxtop info
      
    
  • 以自定义显示的变量,简单列出需要显示的变量。使用 “print” 命令显示自定义请求。

      ngxtop print request http_user_agent remote_addr
      
    
  • 显示请求最多的客户端IP地址

      ngxtop top remote_addr
      
    
  • 显示状态码是404的请求

      ngxtop -i 'status == 404' print request status
    
  • 统计访问次数最多的请求

      ngxtop -l access.log --no-follow
    
  • 自定义排序的字段

      ngxtop -l access.log --no-follow -o avg_bytes_sent
    
  • 自定义过滤条件

      只统计成功
      ngxtop -l access.log --no-follow -i 'status!=200'
    
  • 输出400以上状态吗的请求以及请求来源

    ngxtop -i ‘status >= 400’ print request status http_referer

  • 搜索客户端为 iPhone 的 log

       ngxtop -l access.log --no-follow -i 'http_user_agent.find('iPhone')'
       条件里是可以嵌 python 语句的,这些语句被 eval() 动态翻译并执行。需要注意的是这些语句如果抛出异常会导致 ngxtop 异常退出。
    
  • 分组过滤

       -g 相当于 group by,
       -a 相当于 having。
       ngxtop 已经默认提供了 avg_bytes_sent, 2xx, 3xx, 4xx, 5xx 这些聚合字段,一般这些字段已经足够了。
       如果业务复杂了,想做出更多的查询,可以利用这两个参数自己组合条件。
    
       访问量前十的ip地址
          ngxtop --group-by remote_addr
    
  • 除了Nginx,ngtop 还可以处理其他的日志文件,比如还可以监控apache日志,如:

使用普通格式从远程服务器解析apache日志

ssh user@remote_server tail -f /var/log/apache2/access.log | ngxtop -f common

更多内容请参见 :

另外再推荐一个可以生成统计报表,输出为html,cvs等文件的分析统计 :

让人过于舒服的路,都是下坡路;最不费力气的行走,都是顺风走。然而,动物园里养不出千里马,水井里也生不出腾飞的巨龙。你最终变成什么样,很大程度上取决于你在人生道路上,是选择迎风奔跑,还是就坡下驴。努力这个词太平凡,但努力将使你的人生不平庸。